/**
 * 有N个怪物按顺序，每个怪物有Ai的血或者Bi的蓝。
 * Taka初始有H的血和M的蓝。
 * 对每一个怪物，Taka可以减Ai的血或者减Bi的蓝将其杀死
 * 问最多杀多少个怪物。
 * N、H、M均在3000
 * 令 D[i][j] 为杀死第i个怪物且血量胜j时的最大蓝量，则
 *    D[i][j] = max(D[i - 1][j + A[i]], D[i - 1][j] - B[i])
 * 注意边界条件。
 * 初始令D[0][H] = M，其余Dij均为-1
 * 然后反向检查即可，对于第一个存在不为-1的D[i][j]，则可以杀死i个怪物。
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vll = vector<llt>;

#ifndef ONLINE_JUDGE
int const SZ = 20;
#else
int const SZ = 3000;
#endif

int N, H, M;
vll A, B;
vector<vll> D;

void chkmax(llt & d, llt a){
    if(-1 == d or d < a) d = a; 
}

void work(){
    cin >> N >> H >> M;
    A.assign(N + 1, {});
    B.assign(N + 1, {});
    for(int i=1;i<=N;++i) cin >> A[i] >> B[i];

    D.assign(N + 1, vll(SZ + 1, -1));
    D[0][H] = M;
    for(int i=1;i<=N;++i){
        for(int j=0;j<=SZ;++j){
            if(j + A[i] <= SZ){
                chkmax(D[i][j], D[i - 1][j + A[i]]);
            }
            if(D[i - 1][j] >= B[i]){
                chkmax(D[i][j], D[i - 1][j] - B[i]);
            }
        }
    }
    int ans = 0;
    for(int i=N;i>=0;--i){
        for(int j=0;j<=SZ;++j){
            if(D[i][j] != -1){
                ans = i;
                goto L;
            }
        }
    }
    L:
    cout << ans << endl;
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}